home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 013 / nmove586.arc / MOVE.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-05-24  |  3.9 KB  |  210 lines

  1.     TITLE move
  2.  
  3. ; 3-24-85 return a error code
  4.  
  5.  
  6.  
  7. ;Routines
  8.  
  9.     public    START,ERROR_JUMP,MM,M0,M1,M2,M3,M4,M5,M1_JUMP,ERROR,EXIT
  10.     public    ERROR_EXIT
  11.  
  12. ;Variables
  13.  
  14.     public    SOURCE_NAME,DESTINATION_NAME,PARSED_DESTINATION_NAME,D_SWITCH
  15.     public    FILE_ALREADY_EXISTS
  16.  
  17.     EXTRN    PARSE:NEAR
  18.     EXTRN    COPYFILE:NEAR
  19.     EXTRN    PRINT_FILENAME:NEAR
  20.     EXTRN    MOVE_PARAMETERS:NEAR
  21.     EXTRN    MOVE_PNAME:NEAR
  22.     EXTRN    GET_D_SWITCH:NEAR
  23.     EXTRN    ERROR_ROUTINE:NEAR
  24.     EXTRN    APPEND_STAR_DOT_STAR:NEAR
  25.     EXTRN    FIXUP_COMMAND_LINE:NEAR
  26.  
  27. G    GROUP    CODE
  28. CODE    SEGMENT PUBLIC
  29.     ASSUME CS:G,  DS:G,  ES:G,  SS:G
  30.     ORG 100H                ; com file
  31.  
  32. FILE_NOT_FOUND        EQU    11
  33. DELETE_ERROR        EQU    14
  34. FILE_ALREADY_EXISTS_EQU    EQU     6
  35. MAX_NAME_LENGTH        EQU    80
  36.  
  37.  
  38. ;  Function calls
  39. RENAME        EQU    56H
  40. DELETE_FILE    EQU    41H
  41. TERMINATE    EQU    4CH
  42. SET_DTA        EQU    1AH
  43. FIND_FIRST_FILE    EQU    4EH
  44. FIND_NEXT_FILE    EQU    4FH
  45.  
  46.  
  47. DATABLOCK    STRUC            ; For "find first" and "find next"
  48.         DB    21 DUP (?)    ; reserved for find_nexts
  49. ATTRIBUTE    DB    0
  50. TIME        DW    0
  51. DATE        DW    0
  52. LOW_SIZE    DW    0
  53. HIGH_SIZE    DW    0
  54. PNAME        DB    13 DUP (?)
  55. DATABLOCK    ENDS    
  56.  
  57. START:
  58.     JMP    MM
  59.  
  60. SOURCE_NAME        DB    MAX_NAME_LENGTH DUP(?)
  61. FOUND_SOURCE_NAME    DATABLOCK <,,,,,,>
  62. DESTINATION_NAME    DB    MAX_NAME_LENGTH DUP(?)
  63. PARSED_DESTINATION_NAME    DB    MAX_NAME_LENGTH DUP(?)
  64. SCRATCH            DATABLOCK <,,,,,,>
  65. D_SWITCH        DB    ?
  66. FILE_ALREADY_EXISTS    DB    FILE_ALREADY_EXISTS_EQU
  67.  
  68. ERROR_JUMP:
  69.     JMP    ERROR
  70.  
  71. MM:
  72.     CMP    AL, 0FFH    ; Check for valid drive specifications.
  73.     JZ    ERROR_JUMP
  74.     CMP    AH, 0FFH
  75.     JZ    ERROR_JUMP
  76.  
  77.     CALL    FIXUP_COMMAND_LINE
  78.  
  79.     CALL    GET_D_SWITCH            ; look for the "d" switch
  80.     MOV    [D_SWITCH], AL
  81.  
  82.     LEA    DX, SOURCE_NAME        ; move both filenames to 
  83.     LEA    BX, DESTINATION_NAME        ; buffers
  84.     CALL    MOVE_PARAMETERS            
  85.     JC    ERROR_JUMP
  86.  
  87.     MOV    AH, SET_DTA
  88.     LEA    DX, FOUND_SOURCE_NAME
  89.     INT    21H
  90.  
  91. M0:
  92.     MOV    AH, [FIND_FIRST_FILE]    ; search for a file
  93.     LEA    DX, SOURCE_NAME
  94.     MOV    CX, 20H
  95.     INT    21H
  96.     JNC    M1
  97.     
  98.     MOV    AH, [FIND_FIRST_FILE]    ; search for a dir
  99.     MOV    CX, 10H
  100.     INT    21H
  101.     MOV    AL, FILE_NOT_FOUND
  102.     JC    ERROR_JUMP    
  103.  
  104.     LEA    SI, SOURCE_NAME        ; append \*.* to the name
  105.     CALL    APPEND_STAR_DOT_STAR
  106.     JMP    M0
  107.  
  108. M1:
  109.     LEA    BX, FOUND_SOURCE_NAME.PNAME    ; Parse the file
  110.     LEA    SI, DESTINATION_NAME
  111.     LEA    DI, PARSED_DESTINATION_NAME
  112.     CALL    PARSE
  113.     JC    ERROR_JUMP
  114.  
  115.     MOV    AH, SET_DTA
  116.     LEA    DX, SCRATCH
  117.     INT    21H
  118.     
  119.     MOV    AH, FIND_FIRST_FILE        ; Look for the file 
  120.     LEA    DX, PARSED_DESTINATION_NAME
  121.     MOV    CX, 20H
  122.     INT    21H
  123.     JNC    M2
  124.     
  125.     MOV    AH, FIND_FIRST_FILE        ; look for a dir
  126.     MOV    CX, 10H
  127.     INT    21H
  128.     JC    M4
  129.  
  130.     LEA    SI, DESTINATION_NAME        ; append \*.* to the name
  131.     CALL    APPEND_STAR_DOT_STAR        ; and reparse
  132.     JC    ERROR
  133.     JMP    M1
  134.  
  135. M2:
  136.     CMP    [D_SWITCH], 0            ; Is the delete switch on?
  137.     JNZ    M3
  138.     
  139.     LEA    SI, PARSED_DESTINATION_NAME    ; print the filename which
  140.     CALL    PRINT_FILENAME        ; already exists
  141.  
  142.     MOV    AL, [FILE_ALREADY_EXISTS]    ; print "file already exists"
  143.     CALL    ERROR_ROUTINE
  144.     JMP    M5
  145.  
  146. M3:
  147.     MOV    AH, DELETE_FILE        ; delete the old file
  148.     LEA    DX, PARSED_DESTINATION_NAME
  149.     INT    21H
  150.     MOV    AL, DELETE_ERROR
  151.     JC    ERROR
  152.     
  153. M4:
  154.     LEA    SI, PARSED_DESTINATION_NAME    ; print the filename 
  155.     CALL    PRINT_FILENAME            ; to be moved
  156.     
  157.     LEA    SI, FOUND_SOURCE_NAME.PNAME    ; add the pname found
  158.     LEA    DI, SOURCE_NAME              ; to the end of "source_name"
  159.     CALL    MOVE_PNAME
  160.     JC    ERROR
  161.     
  162.     MOV    AH, RENAME            ; rename the file.
  163.     LEA    DX, SOURCE_NAME
  164.     LEA    DI, PARSED_DESTINATION_NAME
  165.     INT    21H
  166.     JNC    M5
  167.  
  168.     CMP    AX, 11H            ; copy the file if on 
  169.     JNZ    ERROR                ; different devices
  170.     CALL    COPYFILE
  171.     JC    ERROR
  172.  
  173. M5:
  174.     MOV    AH, SET_DTA
  175.     LEA    DX, FOUND_SOURCE_NAME
  176.     INT    21H
  177.  
  178.     MOV    AH, FIND_NEXT_FILE        ; search for a file
  179.     LEA    DX, SOURCE_NAME
  180.     MOV    CX, 20H
  181.     INT    21H
  182.     JNC    M1_JUMP
  183.     
  184.     MOV    AH, FIND_NEXT_FILE        ; search for a dir
  185.     MOV    CX, 10H
  186.     INT    21H
  187.     JC    EXIT    
  188.  
  189.     LEA    SI, SOURCE_NAME        ; append "\*.*" to the name
  190.     CALL    APPEND_STAR_DOT_STAR
  191.     JC    ERROR
  192.  
  193. M1_JUMP:
  194.     JMP    M1            
  195.  
  196. ERROR:
  197.     CALL    ERROR_ROUTINE
  198.     mov    ax, 1
  199.     jmp    short error_exit
  200.  
  201. EXIT:    
  202.     XOR    AX, AX                ; set the error code = no
  203.                         ; error
  204. ERROR_EXIT:
  205.     MOV    AH,4CH
  206.     INT    33
  207.  
  208. CODE    ENDS
  209.     END    START
  210.